function Log() {}

Log.prototype.type = ['primary', 'success', 'warn', 'error', 'info']

Log.prototype.typeColor = function (type) {
    let color = ''
    switch (type) {
        case 'primary':
            color = '#2d8cf0'
            break
        case 'success':
            color = '#19be6b'
            break
        case 'info':
            color = '#909399'
            break
        case 'warn':
            color = '#ff9900'
            break
        case 'error':
            color = '#f03f14'
            break
        default:
            color = '#35495E'
            break
    }
    return color
}

Log.prototype.isArray = function (obj) {
    return Object.prototype.toString.call(obj) === '[object Array]'
}

Log.prototype.print = function (text, type = 'default', back = false) {
    if (typeof text === 'object') {
        // 如果是對象則調用打印對象方式
        this.isArray(text) ? console.table(text) : console.dir(text)
        return
    }
    if (back) {
        // 如果是打印帶背景圖的
        console.log(`%c ${text} `, `background:${this.typeColor(type)}; padding: 2px; border-radius: 4px; color: #fff;`)
    } else {
        console.log(
            `%c ${text} `,
            `border: 1px solid ${this.typeColor(type)};
        padding: 2px; border-radius: 4px;
        color: ${this.typeColor(type)};`
        )
    }
}

Log.prototype.printBack = function (type = 'primary', title) {
    this.print(type, title, true)
}

Log.prototype.pretty = function (type = 'primary', title, text) {
    if (typeof text === 'object') {
        console.group('Console Group', title)
        console.log(
            `%c ${title}`,
            `background:${this.typeColor(type)};border:1px solid ${this.typeColor(type)};
        padding: 1px; border-radius: 4px; color: #fff;`
        )
        this.isArray(text) ? console.table(text) : console.dir(text)
        console.groupEnd()
        return
    }
    console.log(
        `%c ${title} %c ${text} %c`,
        `background:${this.typeColor(type)};border:1px solid ${this.typeColor(type)};
      padding: 1px; border-radius: 4px 0 0 4px; color: #fff;`,
        `border:1px solid ${this.typeColor(type)};
      padding: 1px; border-radius: 0 4px 4px 0; color: ${this.typeColor(type)};`,
        'background:transparent'
    )
}

Log.prototype.prettyPrimary = function (title, ...text) {
    text.forEach(t => this.pretty('primary', title, t))
}

Log.prototype.prettySuccess = function (title, ...text) {
    text.forEach(t => this.pretty('success', title, t))
}

Log.prototype.prettyWarn = function (title, ...text) {
    text.forEach(t => this.pretty('warn', title, t))
}

Log.prototype.prettyError = function (title, ...text) {
    text.forEach(t => this.pretty('error', title, t))
}

Log.prototype.prettyInfo = function (title, ...text) {
    text.forEach(t => this.pretty('info', title, t))
}

export default new Log()
